package com.字符串;

/**
 * 编写一个函数来查找字符串数组中的最长公共前缀。
 *
 * 如果不存在公共前缀，返回空字符串 ""。
 *
 * 示例 1:
 *
 * 输入: ["flower","flow","flight"]
 * 输出: "fl"
 */
public class 最长公共前缀 {
    static class Solution {
        /**
         * 将首串每个前缀取出，与剩余的字符前缀挨个比
         *
         * @param strs
         * @return
         */
        public String longestCommonPrefix(String[] strs) {
            //判断空
            if (strs.length == 0) {
                return "";
            }
            String baseStr = strs[0];
            //当只有1个的时候返回此
            if (strs.length == 1) {
                return baseStr;
            }
            int i = 0;
            //给外循环起个名称
            qiyu:
            for (i = 0; i < baseStr.length(); i++) {
                for (int j = 1; j < strs.length; j++) {
                    try {
                        //把字符串挨个取出来进行比较  当索引越界和不等的时候就结束外循环
                        if (baseStr.charAt(i) != strs[j].charAt(i)) {
                            break qiyu;
                        }
                        ;
                    } catch (Exception e) {
                        break qiyu;
                    }
                }
            }
            //说明没有公共前缀
            if (i == 0) {
                baseStr = "";
            }

            return baseStr.substring(0, i);
        }

        /**
         * 官方解法
         * @param strs
         * @return
         */
        public String longestCommonPrefix2(String[] strs) {
            if (strs == null || strs.length == 0) return "";
            for (int i = 0; i < strs[0].length(); i++) {
                char c = strs[0].charAt(i);
                for (int j = 1; j < strs.length; j++) {
                    //i==str[j].length() 此方法可以避免索引越界。厉害。
                    if (i == strs[j].length() || strs[j].charAt(i) != c)
                        return strs[0].substring(0, i);
                }
            }
            //当循环全部走完说明首字符就是最长的公共字符
            return strs[0];
        }
    }

        public static void main(String[] args) {
            String str = "onenight";
            System.out.println(str.charAt(1));
            // System.out.println( str.substring(1,20));
            String[] st = {"abc", "ab"};
            Solution solution = new Solution();
            System.out.println(solution.longestCommonPrefix(st));
        }
    }
